home *** CD-ROM | disk | FTP | other *** search
- /* 00010000
- * Name: GOPCLIFV REXX 00020000
- * VM TCP/IP Network GOPHER Client file viewer 00030000
- * Author: Rick Troth, Rice University, Information Systems 00040000
- * Date: 1992-Dec-23 00050000
- * 00060000
- * Input: a plain-text file to view 00070000
- * Output: zero or more information or error messages 00080000
- */ 00090000
- 00100000
- /* 00110000
- * Copyright 1992 Richard M. Troth. This software was developed 00120000
- * with resources provided by Rice University and is intended 00130000
- * to serve Rice's user community. Rice has benefitted greatly 00140000
- * from the free distribution of software, therefore distribution 00150000
- * of unmodified copies of this material is not restricted. 00160000
- * You may change your own copy as needed. Neither Rice 00170000
- * University nor any of its employees or students shall be held 00180000
- * liable for damages resulting from the use of this software. 00190000
- */ 00200000
- 00210000
- Trace "OFF" 00220000
- 00230000
- Parse Arg args '(' . ')' . 00240000
- 00250000
- /* verify availability of input */ 00260000
- 'PEEKTO' 00270000
- If rc ^= 0 & rc ^= 12 Then Exit rc 00280000
- If rc = 12 Then Do /* Warning: file is empty */ 00290000
- 'CALLPIPE COMMAND XMITMSG 559 (ERRMSG | *:' 00300000
- Exit 00310000
- End /* If .. Do */ 00320000
- 00330000
- Address "COMMAND" 'GLOBALV SELECT GOPHER GET' , 00340000
- 'GOPHER PROGID VIEWER ITEM' 00350000
- quit = 0 00360000
- 00370000
- Parse Var item name '05'x path '05'x host '05'x port '05'x xtra 00380000
- Parse Var name 1 . 2 name /* discard type indicator byte */ 00390000
- Parse Var path 1 . 2 path /* discard type indicarot byte */ 00400000
- If name = "" Then name = args 00410000
- 00420000
- /* fetch fs. stem variable from GlobalVs */ 00430000
- 'CALLPIPE COMMAND GLOBALV SELECT GOPHER LIST | DROP' , 00440000
- '| LOCATE 1-4 / FS./ | SPEC /=/ 1 2-* NEXT | VARLOAD' 00450000
- If rc ^= 0 Then Address "COMMAND" 'EXEC GOPCLINI' 00460000
- If ^Datatype(fs.tube,'X') Then fs.tube = "" 00470000
- 00480000
- message.0 = 0 00490000
- command = "" 00500000
- 00510000
- Select /* viewer */ 00520000
- When viewer = "" Then Call BUILT_IN 00530000
- When viewer = "XEDIT" Then Call XEDIT 00540000
- When viewer = "BROWSE" Then Call BROWSE 00550000
- Otherwise Call ANYOTHER 00560000
- /* 00570000
- handle disk-full conditions! 00580000
- */ 00590000
- End /* Select viewer */ 00600000
- vrc = rc 00610000
- 00620000
- 'CALLPIPE STEM MESSAGE. | *:' 00630000
- 00640000
- Parse Upper Var command cmdverb . 00650000
- Address "COMMAND" 'GLOBALV SELECT GOPHER PUT' , 00660000
- 'COMMAND CMDVERB' 00670000
- 00680000
- Exit vrc 00690000
- 00700000
- 00710000
- /* ============================================================ BUILT_IN00720000
- */ 00730000
- BUILT_IN: 00740000
- 00750000
- /* read the file from the preceding stage */ 00760000
- 'CALLPIPE *: | EXPAND | XLATE OUTPUT | XLATE *-* 00-3F 40 FF 40' , 00770000
- '| DEBLOCK FIXED' fs.scrcols + 1 '| STEM FILE.' 00780000
- 00790000
- /* display the file and process user's response */ 00800000
- row = 3; col = 0 00810000
- ki = file.0; kl = fs.scrrows - 5; ko = 1 00820000
- needle = "" /* may be re-used within this context */ 00830000
- 00840000
- 'CALLPIPE COMMAND XMITMSG 614 (APPLID GOP' , 00850000
- 'NOCOMP NOHEADER | STEM HELP.' 00860000
- 00870000
- 'CALLPIPE COMMAND XMITMSG 5 (APPLID GOP NOHEADER | VAR MORE' 00880000
- 00890000
- Do Forever 00900000
- 00910000
- /* write the program title line */ 00920000
- wscreen = sba(0,-1) || field("BLUE","PROT") || sba(0,0) || progid , 00930000
- || sba(0,fs.scrcols-Length(host)-1) || host 00940000
- 00950000
- /* no SBA for status because it follows host immediately */ 00960000
- If message.0 < 1 Then Do 00970000
- wscreen = wscreen || field("PROT") || Left(ko || '/' || ki, 11) 00980000
- If ko + kl <= ki Then 00990000
- wscreen = wscreen || field("WHITE","HIGH","PROT") || more 01000000
- End /* If .. Do */ 01010000
- 01020000
- /* don't write status or name if they'll be overlaid */ 01030000
- If message.0 < 2 Then 01040000
- wscreen = wscreen || sba(2,(fs.scrcols-Length(name))/2) , 01050000
- || field("WHITE","PROT") || name 01060000
- 01070000
- /* write as many message lines as needed */ 01080000
- If message.0 > 0 Then Do 01090000
- Do i = 1 to message.0 01100000
- wscreen = wscreen || sba(i,-1) , 01110000
- || field("RED","HIGH","PROT") || message.i 01120000
- End /* Do For */ 01130000
- message.0 = 0 01140000
- End /* If .. Do */ 01150000
- /* we should probably limit that count */ 01160000
- 01170000
- /* write those PFkey settings */ 01180000
- wscreen = wscreen || sba(fs.scrrows-2,-1) , 01190000
- || field("BLUE","PROT") , 01200000
- || help.1 , 01210000
- || sba(fs.scrrows-1,-1) , 01220000
- || field("BLUE","PROT") , 01230000
- || help.2 01240000
- 01250000
- i = 1; j = ko 01260000
- Do While i <= kl & j <= ki 01270000
- 01280000
- /* 'CALLPIPE VAR FILE.' || i '| XLATE OUTPUT' , 01290000
- '| XLATE *-* 00-3F 40 FF 40 | VAR _LINE' */01300000
- 01310000
- wscreen = wscreen || sba(i+2,-1) || field("GREEN","PROT") 01320000
- wscreen = wscreen || file.j 01330000
- i = i + 1; j = j + 1 01340000
- End 01350000
- 01360000
- rscreen = write_read(wscreen || sba(row,col) || '13'x) 01370000
- Parse Var rscreen 1 aid 2 offset . '11'x rscreen 01380000
- offset = fix(offset) 01390000
- row = offset % fs.scrcols; col = offset // fs.scrcols 01400000
- 01410000
- /* keep the row/col values within bounds */ 01420000
- row = 3 /* just reset it */ 01430000
- col = 0 /* just reset it */ 01440000
- 01450000
- Select /* aid */ 01460000
- When aid = '7D'x /* enter */ Then nop 01470000
- When aid = 'F2'x /* PF2 */ | , 01480000
- aid = 'C2'x /* PF14 */ | , 01490000
- aid = '7B'x /* PF11 */ | , 01500000
- aid = '4B'x /* PF23 */ Then Call SUBXEDIT 01510000
- When aid = 'F3'x /* PF3 */ | , 01520000
- aid = 'C3'x /* PF15 */ Then Leave 01530000
- When aid = 'F4'x /* PF4 */ | , 01540000
- aid = 'C4'x /* PF16 */ Then Call PRINT 01550000
- When aid = 'F5'x /* PF5 */ | , 01560000
- aid = 'C5'x /* PF17 */ Then Call SAVE 01570000
- When aid = 'F6'x /* PF6 */ | , 01580000
- aid = 'C6'x /* PF18 */ Then Call FIND 01590000
- When aid = 'F7'x /* PF7 */ | , 01600000
- aid = 'C7'x /* PF19 */ Then ko = Max(ko-kl+1,1) 01610000
- When aid = 'F8'x /* PF8 */ | , 01620000
- aid = 'C8'x /* PF20 */ Then ko = Min(ko+kl-1,ki) 01630000
- When aid = 'F9'x /* PF9 */ | , 01640000
- aid = 'C9'x /* PF21 */ Then Call MARK 01650000
- When aid = '7A'x /* PF10 */ | , 01660000
- aid = '4A'x /* PF22 */ Then Call BOOKLIST 01670000
- When aid = '6D'x /* clear */ | , 01680000
- aid = '6E'x /* PA2 */ Then Do 01690000
- row = 3; col = 0; ko = 1 01700000
- End /* When .. Do */ 01710000
- When aid = '7C'x /* PF12 */ | , 01720000
- aid = '4C'x /* PF24 */ | , 01730000
- aid = 'F0'x /* sysrq */ | , 01740000
- aid = '6C'x /* PA1 */ Then quit = 1 01750000
- When aid = 'F1'x /* PF1 */ | , 01760000
- aid = 'C1'x /* PF13 */ Then Call HELP 01770000
- When aid = '00'x Then Do 01780000
- /* I/O error on screen */ 01790000
- 'CALLPIPE COMMAND XMITMSG 925 (APPLID GOP' , 01800000
- 'CALLER FVW ERRMSG | STEM MESSAGE. APPEND' 01810000
- Leave 01820000
- End 01830000
- Otherwise Do /* Undefined PFkey/PAkey */ 01840000
- 'CALLPIPE COMMAND XMITMSG 657 "' || c2x(aid) || '"' , 01850000
- '(APPLID GOP CALLER FVW ERRMSG | STEM MESSAGE. APPEND' 01860000
- End /* Otherwise Do */ 01870000
- End /* Select aid */ 01880000
- 01890000
- If quit Then Leave 01900000
- 01910000
- End /* Do Forever */ 01920000
- 01930000
- If quit Then command = "QUIT" 01940000
- 01950000
- Return 01960000
- 01970000
- 01980000
- 01990000
- /* =============================================================== XEDIT02000000
- * Take the "file" from the input stream and pass it to CMS XEDIT. 02010000
- */ 02020000
- XEDIT: 02030000
- 02040000
- If fs.tube ^= "" Then Do 02050000
- /* "Can't run XEDIT on this terminal." */ 02060000
- 'CALLPIPE COMMAND XMITMSG 512 "XEDIT"' , 02070000
- '(APPLID GOP CALLER FVW ERRMSG | STEM MESSAGE. APPEND' 02080000
- Return 02090000
- End /* If .. Do */ 02100000
- 02110000
- /* stash this in a temporary file */ 02120000
- 'CALLPIPE *: | > VMGOPHER DOCUMENT A3' 02130000
- 02140000
- /* what's the real name of the file? */ 02150000
- Parse Value gopclifi(path) With fn ft . 02160000
- Push "COMMAND SET FNAME" fn 02170000
- Push "COMMAND SET FTYPE" ft 02180000
- Push "COMMAND SET FMODE A1" 02190000
- 02200000
- /* now invoke XEDIT */ 02210000
- 'CALLPIPE COMMAND STATE GOPXEDPR XEDIT *' 02220000
- If rc = 0 Then Address "COMMAND" , 02230000
- 'XEDIT VMGOPHER DOCUMENT A (PROFILE GOPXEDPR' 02240000
- Else Address "COMMAND" , 02250000
- 'XEDIT VMGOPHER DOCUMENT A' 02260000
- 02270000
- Return 02280000
- 02290000
- 02300000
- 02310000
- /* ============================================================== BROWSE02320000
- * Take the "file" from the input stream and pass it to CMS BROWSE. 02330000
- */ 02340000
- BROWSE: 02350000
- 02360000
- If fs.tube ^= "" Then Do 02370000
- /* "Can't run BROWSE on this terminal." */ 02380000
- 'CALLPIPE COMMAND XMITMSG 512 "BROWSE"' , 02390000
- '(APPLID GOP CALLER FVW ERRMSG | STEM MESSAGE. APPEND' 02400000
- Return 02410000
- End /* If .. Do */ 02420000
- 02430000
- Parse Value gopclifi(path) With fn ft . 02440000
- filespec = fn ft 'A' 02450000
- 02460000
- 'CALLPIPE CMS STATE' filespec '| STEM MESSAGE.' 02470000
- If rc ^= 0 & rc ^= 28 & rc ^= 20 Then Return 02480000
- If rc = 0 | rc = 20 Then Do 02490000
- fn = "VMGOPHER" 02500000
- ft = "DOCUMENT" 02510000
- End /* If .. Do */ 02520000
- message.0 = 0 02530000
- 02540000
- /* stash this in a temporary file */ 02550000
- 'CALLPIPE *: | >' fn ft 'A3' 02560000
- 02570000
- /* stash this in a temporary file and invoke BROWSE */ 02580000
- Address "COMMAND" 'BROWSE' filespec 02590000
- 02600000
- Return 02610000
- 02620000
- 02630000
- 02640000
- /* ============================================================ ANYOTHER02650000
- * View the file with some unknown text editor or file browser. 02660000
- */ 02670000
- ANYOTHER: 02680000
- 02690000
- If fs.tube ^= "" Then Do 02700000
- /* "Can't run" viewer "on this terminal." */ 02710000
- 'CALLPIPE COMMAND XMITMSG 512 VIEWER' , 02720000
- '(APPLID GOP CALLER FVW ERRMSG | STEM MESSAGE. APPEND' 02730000
- Return 02740000
- End /* If .. Do */ 02750000
- 02760000
- Parse Value gopclifi(path) With fn ft . 02770000
- filespec = fn ft 'A' 02780000
- 02790000
- 'CALLPIPE CMS STATE' filespec '| STEM MESSAGE.' 02800000
- If rc ^= 0 & rc ^= 28 & rc ^= 20 Then Return 02810000
- If rc = 0 | rc = 20 Then Do 02820000
- fn = "VMGOPHER" 02830000
- ft = "DOCUMENT" 02840000
- End /* If .. Do */ 02850000
- message.0 = 0 02860000
- 02870000
- /* stash this in a temporary file */ 02880000
- 'CALLPIPE *: | >' fn ft 'A3' 02890000
- 02900000
- /* stash this in a temporary file and invoke the viewer */ 02910000
- 'CALLPIPE CMS' viewer filespec '| CONSOLE' 02920000
- 02930000
- Return 02940000
- 02950000
- 02960000
- 02970000
- /* ---------------------------------------------------------------- HELP02980000
- * Invoke CMS HELP passing any supplied argument (context sensitive). 02990000
- */ 03000000
- HELP: Procedure Expose fs. message. 03010000
- 03020000
- If fs.tube ^= "" Then 03030000
- 'CALLPIPE COMMAND HELP GOPHER VIEWER (ALL' , 03040000
- '| GOPCLIFV VIEWER HELP' , 03050000
- '| STEM MESSAGE. APPEND' 03060000
- 03070000
- Else Do 03080000
- 'CALLPIPE COMMAND HELP GOPHER VIEWER' 03090000
- Address "COMLAND" 'VMFCLEAR' 03100000
- End /* Else Do */ 03110000
- 03120000
- Return 03130000
- 03140000
- 03150000
- 03160000
- /* ------------------------------------------------------------ SUBXEDIT03170000
- * Take the file in storage and pass it to CMS XEDIT. 03180000
- */ 03190000
- SUBXEDIT: 03200000
- 03210000
- If fs.tube ^= "" Then Do 03220000
- /* "Can't run XEDIT on this terminal." */ 03230000
- 'CALLPIPE COMMAND XMITMSG 512 "XEDIT"' , 03240000
- '(APPLID GOP CALLER FVW ERRMSG | STEM MESSAGE. APPEND' 03250000
- Return 03260000
- End /* If .. Do */ 03270000
- 03280000
- /* stash this in a temporary file */ 03290000
- 'CALLPIPE STEM FILE. | > VMGOPHER DOCUMENT A3' 03300000
- 03310000
- /* what's the real name of the file? */ 03320000
- Parse Value gopclifi(path) With fn ft . 03330000
- Push "COMMAND SET FNAME" fn 03340000
- Push "COMMAND SET FTYPE" ft 03350000
- Push "COMMAND SET FMODE A1" 03360000
- 03370000
- /* now invoke XEDIT */ 03380000
- 'CALLPIPE COMMAND STATE GOPXEDPR XEDIT *' 03390000
- If rc = 0 Then Address "COMMAND" , 03400000
- 'XEDIT VMGOPHER DOCUMENT A (PROFILE GOPXEDPR' 03410000
- Else Address "COMMAND" , 03420000
- 'XEDIT VMGOPHER DOCUMENT A' 03430000
- 03440000
- Return 03450000
- 03460000
- 03470000
- 03480000
- /* --------------------------------------------------------------- PRINT03490000
- * Take the current "file" in context and send it to the user's 03500000
- * virtual printer. Printer may be SPOOLed CONTinuous. 03510000
- */ 03520000
- PRINT: 03530000
- 03540000
- If fs.tube ^= "" Then Do 03550000
- /* "Can't PRINT from this terminal." */ 03560000
- 'CALLPIPE COMMAND XMITMSG 507 (APPLID GOP CALLER FVW ERRMSG' , 03570000
- '| STEM MESSAGE. APPEND' 03580000
- Return 03590000
- End /* If .. Do */ 03600000
- 03610000
- 'CALLPIPE STEM FILE. | PRINT (TITLE' name '| STEM MESSAGE. APPEND' 03620000
- 03630000
- Return 03640000
- 03650000
- 03660000
- 03670000
- /* ---------------------------------------------------------------- SAVE03680000
- * Save the current file being viewed to the user's A disk. 03690000
- */ 03700000
- SAVE: 03710000
- 03720000
- If fs.tube ^= "" Then Do 03730000
- Call MESSAGE "Can't SAVE files via this terminal." 03740000
- Return 03750000
- End /* If .. Do */ 03760000
- 03770000
- Parse Value gopclifi(path) With fn ft . 03780000
- filespec = fn ft 'A' 03790000
- 03800000
- 'CALLPIPE CMS STATE' filespec '| STEM MESSAGE.' 03810000
- If rc = 0 Then Do 03820000
- 'CALLPIPE COMMAND XMITMSG 24 FILESPEC' , 03830000
- '| SPLIT AT /;/ | TAKE | STEM MESSAGE.' 03840000
- Return 03850000
- End /* If .. Do */ 03860000
- If rc ^= 28 Then Return 03870000
- message.0 = 0 03880000
- 03890000
- 'CALLPIPE STEM FILE. | >' filespec 03900000
- If rc = 0 Then Do 03910000
- /* Creating new file: */ 03920000
- 'CALLPIPE COMMAND XMITMSG 571 | STEM MESSAGE. APPEND' 03930000
- message.1 = message.1 filespec 03940000
- /* Call message "Created" filespec "from" path */ 03950000
- End /* If .. Do */ 03960000
- 03970000
- Return 03980000
- 03990000
- 04000000
- 04010000
- /* ---------------------------------------------------------------- FIND04020000
- * Find a particular string within the file being viewed. 04030000
- */ 04040000
- FIND: 04050000
- 04060000
- 'CALLPIPE COMMAND XMITMSG 602 "' || needle || '" (APPLID GOP' , 04070000
- 'CALLER MNU NOHEADER | GOPCLIUI | VAR NEEDLE' 04080000
- needle = Translate(Strip(needle)) 04090000
- If needle = "" Then Return 04100000
- 04110000
- Do i = ko + 1 to ki 04120000
- If Index(Translate(file.i),needle) > 0 Then Do 04130000
- ko = i 04140000
- Return 04150000
- End /* If .. Do */ 04160000
- End /* Do For */ 04170000
- 04180000
- /* 'CALLPIPE COMMAND XMITMSG 546 (ERRMSG' CALLER DMS is OK */ 04190000
- /* "Target not found" */ 04200000
- 'CALLPIPE COMMAND XMITMSG 546 (APPLID GOP CALLER MNU ERRMSG' , 04210000
- '| STEM MESSAGE. APPEND' 04220000
- 04230000
- Return 04240000
- 04250000
- 04260000
- 04270000
- 04280000
- /* ---------------------------------------------------------------- MARK04290000
- * Save a book mark referencing this file. 04300000
- */ 04310000
- MARK: 04320000
- 04330000
- If fs.tube ^= "" Then Do 04340000
- /* "Can't set bookmarks from this screen." */ 04350000
- 'CALLPIPE COMMAND XMITMSG 43 (APPLID GOP CALLER FVW ERRMSG' , 04360000
- '| STEM MESSAGE. APPEND' 04370000
- Return 04380000
- End /* If .. Do */ 04390000
- 04400000
- Address "COMMAND" 'GLOBALV SELECT GOPHER GET BOOKMARK.0' 04410000
- If ^Datatype(bookmark.0,'N') Then bookmark.0 = 0 04420000
- i = bookmark.0 + 1 04430000
- bookmark.i = item 04440000
- Address "COMMAND" 'GLOBALV SELECT GOPHER PUTP BOOKMARK.' || i 04450000
- bookmark.0 = i 04460000
- Address "COMMAND" 'GLOBALV SELECT GOPHER PUTP BOOKMARK.0' 04470000
- 04480000
- If rc = 0 Then 'CALLPIPE COMMAND XMITMSG 41 I' , 04490000
- '(APPLID GOP CALLER FVW ERRMSG | STEM MESSAGE. APPEND' 04500000
- /* "Bookmark" i "saved." */ 04510000
- Else 'CALLPIPE COMMAND XMITMSG 514 RC "GLOBALV"' , 04520000
- '(APPLID GOP CALLER FVW ERRMSG | STEM MESSAGE. APPEND' 04530000
- 04540000
- Return 04550000
- 04560000
- 04570000
- 04580000
- /* ------------------------------------------------------------ BOOKLIST04590000
- * Call GOPCLI to show the lit of bookmarks. 04600000
- */ 04610000
- BOOKLIST: 04620000
- 04630000
- Address "CMS" 'GOPCLI (BOOKLIST' 04640000
- 04650000
- Return 04660000
- 04670000
- 04680000
- 04690000
- /* ----------------------------------------------------------------- FIX04700000
- * Takes an inbound 3270 DS screen address (two bytes) 04710000
- * and returns the equivalent byte offset in decimal. 04720000
- */ 04730000
- FIX: 04740000
- Parse Arg o,. 04750000
- Parse Var o 1 o1 2 o2 3 . 04760000
- o1 = c2d(o1) 04770000
- o2 = c2d(o2) 04780000
- If o1 < 64 Then Return o1 * 256 + o2 04790000
- Else Return (o1 // 64) * 64 + (o2 // 64) 04800000
- 04810000
- 04820000
- 04830000
- /* ---------------------------------------------------------- WRITE_READ04840000
- * Display what we have, then wait for user input and return it. 04850000
- */ 04860000
- WRITE_READ: Procedure Expose fs. 04870000
- Parse Arg ws,wcc,wrt,. 04880000
- If wcc = "" Then wcc = 'C3'x 04890000
- /* If wrt = "" Then wrt = 'C0'x */ 04900000
- If wrt = "" Then wrt = fs.write 04910000
- ws = wrt || wcc || ws 04920000
- 'CALLPIPE VAR WS | FULLSCR' fs.tube '| VAR RS' 04930000
- If rc ^= 0 Then rs = '000000'x 04940000
- Return rs 04950000
- 04960000
- 04970000
- 04980000
- /* ----------------------------------------------------------------- SBA04990000
- * (a better SBA function extracted from PIPEDEMO; thanks, Chuck!) 05000000
- * Construct Set Buffer Address order from row and column. 05010000
- */ 05020000
- 05030000
- SBA: Procedure Expose fs. 05040000
- 05050000
- arg row , col, . 05060000
- row = Trunc(row) 05070000
- col = Trunc(col) 05080000
- 05090000
- /*-----------------------------------------------------------------*/ 05100000
- /* Calculate binary address. */ 05110000
- /*-----------------------------------------------------------------*/ 05120000
- 05130000
- offset = row * fs.scrcols + col 05140000
- Do While offset < 0; offset = offset + fs.scrrows * fs.scrcols; End 05150000
- 05160000
- if fs.14bit then return '11'x || d2c(offset,2) 05170000
- 05180000
- /*-----------------------------------------------------------------*/ 05190000
- /* Convert to six-bit format. (xxxx111111111111 -> 0011111100111111*/ 05200000
- /*-----------------------------------------------------------------*/ 05210000
- 05220000
- 'CALLPIPE var offset' , /* Start with char number. */05230000
- '| spec 1-* d2c 1.2 right' , /* Convert to binary. */05240000
- '| spec 1-* c2b 1' , /* Convert to bit string. */05250000
- '| spec /00/ 1 5.6 3' , /* Place first six bits. */05260000
- '/00/ 9 11.6 11' , /* Place second six bits. */05270000
- '| spec 1-* b2c 1' , /* Convert back to binary. */05280000
- '| xlate *-* 00-3F 40-7F' , /* Translate to coded */05290000
- '01-09 C1-C9' , /* buffer address. */05300000
- '11-19 D1-D9' , /* */05310000
- '22-29 E2-E9' , /* */05320000
- '30-39 F0-F9' , /* */05330000
- '| spec x11 1 1.2 2' , /* Prefix with SBA order. */05340000
- '| var offset' /* Put back in variable. */05350000
- 05360000
- Return offset 05370000
- 05380000
- 05390000
- 05400000
- /* --------------------------------------------------------------- FIELD05410000
- * Generate the 3270 DS sequence for extended field attributes 05420000
- * (if available). 05430000
- */ 05440000
- FIELD: Procedure Expose fs. 05450000
- a = '00'x 05460000
- b = '00'x 05470000
- c = 'F1'x 05480000
- i = 1 05490000
- Do While Arg(i) ^= "" 05500000
- Select /* at */ 05510000
- When Abbrev("PROTECTED",Arg(i),2) Then a = bitor(a,'20'x) 05520000
- When Abbrev("SKIP",Arg(i),1) Then a = bitor(a,'10'x) 05530000
- When Abbrev("NODISPLAY",Arg(i),1) Then a = bitor(a,'0C'x) 05540000
- When Abbrev("HIGH",Arg(i),1) Then a = bitor(a,'08'x) 05550000
- When Abbrev("BLINK",Arg(i),3) Then b = bitor(b,'01'x) 05560000
- When Abbrev("REVERSE",Arg(i),3) Then b = bitor(b,'02'x) 05570000
- When Abbrev("UNDERLINE",Arg(i),1) Then b = bitor(b,'04'x) 05580000
- When Abbrev("BLUE",Arg(i),3) Then c = 'F1'x 05590000
- When Abbrev("RED",Arg(i),3) Then c = 'F2'x 05600000
- When Abbrev("PINK",Arg(i),1) Then c = 'F3'x 05610000
- When Abbrev("GREEN",Arg(i),1) Then c = 'F4'x 05620000
- When Abbrev("TURQUOISE",Arg(i),1) Then c = 'F5'x 05630000
- When Abbrev("YELLOW",Arg(i),1) Then c = 'F6'x 05640000
- When Abbrev("WHITE",Arg(i),1) Then c = 'F7'x 05650000
- Otherwise nop 05660000
- End /* Select at */ 05670000
- i = i + 1 05680000
- End /* Do While */ 05690000
- 05700000
- If ^fs.color | , 05710000
- ^fs.exthi Then Return '1D'x || bitor(a,'40'x) 05720000
- Else Return '2902'x || , 05730000
- 'C0'x || bitor(a,'40'x) || , 05740000
- '42'x || bitor(c,'40'x) 05750000
- 05760000
-